﻿using Hardware.Meter.Dingsong;
using Hardware.Meter.Hbm;
using Hardware.Meter.Keli;
using Hardware.Meter.Yaohua;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Hardware.Meter
{
    public class MeterApi
    {

        public IMeter meter;
        private MeterParameter parameter;

        public MeterApi(string file)
        {
            IniFile configFile = new IniFile(file);

            parameter = new MeterParameter();
            parameter.Type = configFile.ReadValue("Meter", String.Format("Type{0}", 0), 0);
            parameter.ComIndex = configFile.ReadValue("Meter", String.Format("ComIndex{0}", 0), 0);
            parameter.ComName = configFile.ReadValue("Meter", String.Format("ComName{0}", 0), "COM1");
            parameter.BaudIndex = configFile.ReadValue("Meter", String.Format("BaudIndex{0}", 0), 0);
            parameter.BaudValue = configFile.ReadValue("Meter", String.Format("BaudValue{0}", 0), 9600);
            parameter.stopBits = (System.IO.Ports.StopBits)configFile.ReadValue("Meter", String.Format("StopBits{0}", 0), 0);
            parameter.parity = (System.IO.Ports.Parity)configFile.ReadValue("Meter", String.Format("Parity{0}", 0), 0);
            parameter.DataBits = configFile.ReadValue("Meter", String.Format("DataBits{0}", 0), 8);
            parameter.MeterUnit = configFile.ReadValue("Meter", String.Format("MeterUnit{0}", 0), "KG");

            // 给出系统配置的单位
            parameter.SystemUnit = configFile.ReadValue("SystemParameter", "SystemWeightUnit", "KG");

            // 根据不同的仪表类型给出不同的实例
            //001 - 柯力D2008F(tf = 0)
            //002 - 顶松DS822系列
            //003 - HBM
            //004 - 耀华A9(tf = 0)
            //999 - 自定义协议

            switch (parameter.Type)
            {
                case 0:
                    // 12 - 柯力D2008F
                    meter = new KeliD2008f(parameter, 12);
                    break;
                case 1:
                    // 002 - 顶松DS822系列 长度：22
                    meter = new DingsongMeter(parameter, 22);
                    break;
                case 2:
                    // 20 - HBM
                    meter = new HBM(parameter, 20);
                    break;
                case 3:
                    // 12 - 耀华A9(tf = 0)
                    meter = new YaohuaA9(parameter, 12);
                    break;
                case 4:
                    // 自定义协议 
                    break;
                case 5:
                    // 托利多协议 
                    meter = new Tuoliduo(parameter, 12);
                    break;
            } 

        }
    }
}
